package com.sky.service;

import com.sky.dto.*;
import com.sky.result.PageBean;
import com.sky.vo.*;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDate;
import java.time.LocalDateTime;

public interface OrderService {

    /**
     * 用户提交订单
     *
     * @param dto 用户的请求参数dto
     * @return 订单信息
     */
    OrderSubmitVO submitOrder(OrdersSubmitDTO dto);

    /**
     * 历史订单查询
     *
     * @param dto dto
     * @return pageBean
     */
    PageBean queryingHistoryOrders(OrdersPageQueryDTO dto);

    /**
     * 查询订单详情
     *
     * @param id 订单id
     * @return orderVO
     */
    OrderVO selectWithDetailById(Long id);

    /**
     * 再来一单
     *
     * @param id 订单id
     */
    void oneMoreOrder(Long id);

    /**
     * 取消订单
     *
     * @param id 订单id
     */
    void cancelOrder(Long id);


    /**
     * 订单支付
     *
     * @param dto dto
     * @return 预计送达时间
     */
    String payment(OrdersPaymentDTO dto);

    /**
     * 订单搜索(管理端)
     * @param dto dto
     * @return pageBean
     */
    PageBean selectOrders(OrdersPageQueryDTO dto);

    /**
     * 各个状态的订单数量统计
     * @return 数量统计
     */
    OrderStatisticsVO selectOrderStatusQuantityStatistics();

    /**
     * 拒单
     * @param dto dto
     */
    void rejectionOrder(OrdersRejectionDTO dto);

    /**
     * 查询订单详情
     * @param id 订单id
     * @return 订单详情数据
     */
    OrderVO selectOrderWithDetail(Long id);

    /**
     * 取消订单
     * @param dto dto
     */
    void cancelOrderWithReason(OrdersCancelDTO dto);

    /**
     * 接单
     * @param dto dto
     */
    void confirmOrder(OrdersConfirmDTO dto);

    /**
     * 派送订单
     * @param id 订单id
     */
    void deliveryOrder(Long id);

    /**
     * 完成订单
     * @param id 订单id
     */
    void completeOrder(Long id);

    /**
     * 用户催单
     * @param id 订单id
     */
    void reminderOrder(Long id);

    /**
     * 营业额统计接口
     * @param begin 开始日期
     * @param end 结束日期
     * @return vo
     */
    TurnoverReportVO getTurnoverStatistics(LocalDate begin, LocalDate end);

    /**
     * 订单统计接口
     * @param dto dto
     * @return vo
     */
    OrderReportVO getOrdersStatistics(DataOverViewQueryDTO dto);

    /**
     * 商品(菜品,套餐)销量排名前10统计
     * @param dto dto
     * @return vo
     */
    SalesTop10ReportVO getTop10(DataOverViewQueryDTO dto);

}